package convert.test;

import java.util.List;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import org.dom4j.*;

/**
 * xml数据转成json
 *
 * @author 。
 */
public class XmlToJson {


    /**
     * 将所有xml数据转成json
     *
     * @param outputXml 要解析的xml数据
     * @return
     * @throws Exception
     */
    public static JSONObject xmlToJson(String outputXml) throws Exception {
        Document document = DocumentHelper.parseText(outputXml);
        Element root = document.getRootElement();
        // 遍历所有子节点
        return elementJson(root);
    }


    /**
     * xml节点转成JsonObject
     *
     * @param node
     * @return
     */
    public static JSONObject elementJson(Element node) {
        JSONObject result = new JSONObject();
        List<Attribute> listAttr = node.attributes();
        for (Attribute attr : listAttr) {
            result.put(attr.getName(), attr.getValue());
        }
        List<Element> listElement = node.elements();
        if (!listElement.isEmpty()) {
            for (Element e : listElement) {
                if (e.attributes().isEmpty() && e.elements().isEmpty()) {
                    result.put(e.getName(), e.getTextTrim());
                } else {
                    if (!result.containsKey(e.getName())) {
                        result.put(e.getName(), new JSONArray());
                    }
                    ((JSONArray) result.get(e.getName())).add(elementJson(e));
                }
            }
        }
        return result;
    }
    public static void main(String[] args) throws Exception {
        String str="<?xml version=\"1.0\" encoding=\"utf-8\"?><root><Header><resultCode>0</resultCode></Header><Body><Desc>你好</Desc></Body></root>";
        System.out.println(XmlToJson.xmlToJson(str));
    }
}
